package Negocios;


import DTO.DTOAgregarParticipante;
import Excepcion.CadenaEmailInvalidoException;
import Excepcion.EmailInvalidoException;
import Excepcion.EmailParticipanteExistenteException;
import Excepcion.AgregarParticipanteException;
import Excepcion.NombreCaracterException;
import Excepcion.NombreParticipanteExistenteException;
import Persistencia.DAO.DAOCompetencia;
import Persistencia.Entidad.Competencia;
import Persistencia.Entidad.EstadoDeCompetencia;
import Persistencia.Entidad.Participante;

public class ControlParticipante {
	public void agregarParticipante(DTOAgregarParticipante nuevoParticipante) throws NombreCaracterException, AgregarParticipanteException, EmailInvalidoException,
			NombreParticipanteExistenteException, EmailParticipanteExistenteException, CadenaEmailInvalidoException  
	{
		Competencia competencia;
		DAOCompetencia daoCompetencia = new DAOCompetencia();
		competencia = daoCompetencia.getCompetenciaHabilitada(nuevoParticipante.getIdCompetencia());
		
		if(competencia != null)
		{
			boolean existe;
			validarDatosParticipante(nuevoParticipante);
			if(competencia.getEstadoDeCompetencia().getId()==1 || competencia.getEstadoDeCompetencia().getId()==2){
				existe = competencia.existenDatos(nuevoParticipante.getNombreEquipo(),nuevoParticipante.getCorreo());
				if(existe == false){
					//TODO debemos obtener la imagen de disco y convertirla a bufferImage
					Participante participante = new Participante(nuevoParticipante.getNombreEquipo(),
											nuevoParticipante.getCorreo(), nuevoParticipante.getImagen(),
											competencia);
					participante.setEliminado(false);
					competencia.agregarParticipante(participante);
					if(competencia.getEstadoDeCompetencia().getId()==2){
						//ControlFixture controlF=new ControlFixture();
						//controlF.eliminarFixture(nuevoParticipante.getIdCompetencia());
						EstadoDeCompetencia estado=daoCompetencia.getEstadoDeCompetencia(1);
						competencia.setEstadoDeCompetencia(estado);
					}
								competencia.eliminarFechas();
								daoCompetencia.updateCompetencia(competencia);
				
				}
			}
			else{
				throw new AgregarParticipanteException("Imposible agregar Participante. La competencia se encuentra en disputa o finalizada.");
			}
		}
	}
	

	private boolean validarDatosParticipante(DTOAgregarParticipante nuevoParticipante)
			throws NombreCaracterException, EmailInvalidoException, CadenaEmailInvalidoException {
		ValidacionString.validarNombreParticipante(nuevoParticipante.getNombreEquipo());
		ValidacionString.validarEmail(nuevoParticipante.getCorreo());
		if(!ValidacionString.validarCadenaEmail(nuevoParticipante.getCorreo())){
			throw new CadenaEmailInvalidoException("Ingrese un email valido");
		}
		
		return false;
	}
}

